// internal/parser/parser/delete.go
package parser

import (
	"fmt"

	"NumberBase/internal/parser/ast"
	"NumberBase/internal/parser/lexer"
)

// parseDeleteStatement 解析DELETE语句
// 例如: DELETE FROM users WHERE id = 1
func (p *Parser) parseDeleteStatement() (*ast.DeleteStatement, error) {
	stmt := &ast.DeleteStatement{}

	// 跳过DELETE关键字
	p.nextToken()

	// 期望下一个Token是FROM
	if !p.currTokenIs(lexer.FROM) {
		return nil, fmt.Errorf("期望FROM，但得到%s", p.currToken.Literal)
	}

	// 跳过FROM关键字
	p.nextToken()

	// 解析表名
	if !p.currTokenIs(lexer.IDENTIFIER) {
		return nil, fmt.Errorf("期望表名，但得到%s", p.currToken.Literal)
	}
	stmt.TableName = p.currToken.Literal

	// 解析WHERE子句(可选)
	p.nextToken()
	if p.currTokenIs(lexer.WHERE) {
		p.nextToken() // 跳过WHERE关键字
		where, err := p.parseExpression(LOWEST)
		if err != nil {
			return nil, err
		}
		stmt.Where = where
	}

	// 检查下一个token是否是分号(作为SQL语句结束标记)
	if p.peekTokenIs(lexer.SEMICOLON) {
		p.nextToken() // 消费分号，确认语句结束
	}
	// 如果没有分号，也允许语句结束（某些SQL环境中分号是可选的）

	return stmt, nil
}
